package de.hm.edu.kinderfinder.listenadapter;

import java.util.Date;
import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import de.hm.edu.kinderfinder.activities.R;
import de.hm.edu.kinderfinder.pojos.ZoneObject;

/**
 * Dieser Adapter befällt die Liste der Zonen in einem speziell vorgesehenem
 * Format.
 * 
 * @author Chrisptopher Samuel Pitter, Lukas Jarosch
 * 
 */
public class ZoneListAdapter extends ArrayAdapter<ZoneObject> {

	private List<ZoneObject> items;
	private Context context;

	public ZoneListAdapter(Context context, int textViewResourceId,
			List<ZoneObject> items) {
		super(context, textViewResourceId, items);
		this.items = items;
		this.context = context;
	}

	/**
	 * Diese Methode generiert für jeden Eintrag im ZonenArray ein View Element
	 * das alle wichtigen Infomrationen der Zone enthält. Dieses View Element
	 * kann dann in eine UI-Liste hinzugefügt werden.
	 */
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View v = convertView;
		if (v == null) { // Object Recycling f�r bessere Performance
			LayoutInflater vi = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			v = vi.inflate(R.layout.zone_listentry, null);
		}
		ZoneObject zone = items.get(position); // die aktuelle Zone
		if (zone != null) { // View Element aufbauen
			TextView name = (TextView) v.findViewById(R.id.zonename);
			TextView time = (TextView) v.findViewById(R.id.time);

			if (name != null) {
				name.setText(zone.getZonename() + "");
			}
			if (time != null) {
				if (zone.getTimeEnd() == 0) { // Nur Zeitdaten darstellen wenn
												// sie auch gesetzt wurden
					time.setText("nicht gesetzt");
				} else {
					Date start = new Date(zone.getTimeStart());
					Date end = new Date(zone.getTimeEnd());
					String weekedays = getWeekdays(zone);
					Log.i("pk", weekedays + "   week");
					String label = getTimeString(start.getHours()) + ":"
							+ getTimeString(start.getMinutes()) + " - "
							+ getTimeString(end.getHours()) + ":"
							+ getTimeString(end.getMinutes()) + "  "
							+ weekedays;
					Log.i("pk",
							"label: " + start.getHours() + " z  "
									+ zone.getZonename() + "  " + weekedays);
					time.setText(label);
				}

			}

		}
		return v;
	}

	/**
	 * Eine Helfer Methode die einen String zusammenbaut der alle gewählten
	 * Wochentage enthält
	 * 
	 * @param zone
	 *            aus der die gewählten Wochentage rausgelesen werden sollen.
	 * @return der generierte String
	 */
	private String getWeekdays(ZoneObject zone) {
		StringBuilder weekDays = new StringBuilder();

		if (zone.isMonday()) {
			weekDays.append("Mo ");
		}

		if (zone.isTuesday()) {
			weekDays.append("Di ");
		}
		if (zone.isWednesday()) {
			weekDays.append("Mi ");
		}
		if (zone.isThursday()) {
			weekDays.append("Do ");
		}
		if (zone.isFriday()) {
			weekDays.append("Fr ");
		}

		if (zone.isSaturday()) {
			weekDays.append("Sa ");
		}

		if (zone.isSunday()) {
			weekDays.append("So ");
		}

		return weekDays.toString();
	}

	/**
	 * Die Helfermethode hängt eine vorliende 0 an Stunden und Minuten an falls
	 * sie fehlt 2:4 > 02:04
	 * 
	 * @param i
	 *            der Zeitwert als Zahl
	 * @return der Zeitwert als String
	 */
	private String getTimeString(int i) {
		Log.i("pk", "timestring: " + i);
		if (i < 10) {

			return "0" + i;

		}

		return i + "";
	}
}